package br.com.rumus.app;

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import br.com.rumus.dao.app.AcaoDAO;
import br.com.rumus.dominio.app.Acao;

@ManagedBean(name="sessao")
@SessionScoped
public class SessaoBean {
	
	private String palavra;
	private List<Acao> resultados;
	private List<Acao> acoes;
	
	public String getPalavra() {
		return palavra;
	}

	public void setPalavra(String palavra) {
		this.palavra = palavra;
	}

	public List<Acao> getAcoes() {
		if(acoes==null){
			acoes = new ArrayList<Acao>();
			AcaoDAO dao = new AcaoDAO();
			SecurityContext context = SecurityContextHolder.getContext();
			for( Acao acao : dao.listar() ){
				for(GrantedAuthority authority : context.getAuthentication().getAuthorities()){
					if(authority.getAuthority().contains(acao.getPapel())){
						acoes.add(acao);
						break;
					}
				}
			}
		}
		return acoes;
	}

	public void setAcoes(List<Acao> acoes) {
		this.acoes = acoes;
	}
	
	public List<Acao> getResultados() {
		this.resultados = new ArrayList<Acao>();
		for(Acao acao : this.acoes){
			if(this.palavra!=null&&acao.getPalavras().contains(this.palavra)){
				this.resultados.add(acao);
			}
		}
		return resultados;
	}

	public void setResultados(List<Acao> resultados) {
		this.resultados = resultados;
	}

	public String busca(){		
		return "/indice.faces";
	}
	
}